﻿
#include "string.h"



void test1()
{
	string s1("hello world hello school");
	//for (int i = 0; i < s1.size(); i++)
	//{
	//	cout << s1[i] << " ";
	//}
	//cout << endl;

	//for (auto& e : s1)
	//{
	//	cout << e << " " ;
	//}
	//cout << endl;

	//string::iterator it = s1.begin();
	//while (it != s1.end())
	//{
	//	cout << *it << " ";
	//	it++;
	//}
	//cout << " ";

	//string::reverse_iterator it = s1.rbegin();
	//auto it = s1.rbegin();
	//while (it != s1.rend())
	//{
	//	cout << *it;
	//	it++;
	//}
	//cout << endl;
}

void test2()
{
	string s2(7, '2');
	//cout << s2 << endl;
	s2.push_back('1');
	s2.push_back('1');
	s2.push_back('1');
	//cout << s2 << endl;
	s2.append("xyz");
	//cout << s2 << endl;
	//cout << sizeof(s2) << endl;
	//cout << sizeof(s2.c_str()) << endl;
	const char* s3 = s2.c_str();
	//cout << s3 << endl; 
	//cout << sizeof(s3);
	//cout << s3[1];
	const char* arr= "adcwq";
	//cout << sizeof(arr);
	//cout << strlen(arr);

	string s4("abcdef");
	string s5 = s4.substr(4);
	//cout << s5 << endl;
	s4.insert(2, "111");
	cout << s4 << endl;
}

void test3()
{
	// 空格替换为%%
	string s6("I am practice code");
	size_t pos = s6.find(' ');
	//while (pos != string::npos)
	//{
	//	s6.replace(pos, 1 ,"%%");
	//	pos = s6.find(' ', pos + 2);
	//}
	//cout <<s6 << endl;

	string s7;
	for (auto ch : s6)
	{
		if (ch == ' ')
		{
			s7 += "%%";
		}
		else
			s7 += ch;
	}
	//cout << s7 << endl;
	s6.swap(s7);
	cout << s6 << endl;
	cout << s7 << endl;
}

	//class Solution {
	//public:
	//	bool isthis(char ch)
	//	{
	//		//     return (ch >= '0' && ch <= '9')
	//		//     || (ch >= 'a' && ch <= 'z')
	//		//     || (ch >= 'A' && ch <= 'Z');
	//		if ((ch >= '0' && ch <= '9')
	//			|| (ch >= 'a' && ch <= 'z')
	//			|| (ch >= 'A' && ch <= 'Z'))
	//			return true;
	//		else
	//			return false;
	//	}

	//	bool isPalindrome(string s)
	//	{
	//		for (auto& e : s)
	//		{
	//			if ('A' <= e && e <= 'Z')
	//				e += 32;
	//		}
	//		int begin = 0;
	//		int end = s.size() - 1;
	//		while (begin < end)
	//		{
	//			while (begin < end && !isthis(s[begin]))
	//			{
	//				begin++;
	//			}
	//			while (begin < end && !isthis(end))
	//			{
	//				end--;
	//			}
	//			if (s[begin] != s[end])
	//				return false;
	//			else
	//			{
	//				end--;
	//				begin++;
	//			}
	//		}
	//		return true;
	//	}
	//};

//class Solution {
//public:
//	bool isLetterOrNumber(char ch)
//	{
//		return (ch >= '0' && ch <= '9')
//			|| (ch >= 'a' && ch <= 'z')
//			|| (ch >= 'A' && ch <= 'Z');
//	}
//
//	bool isPalindrome(string s) {
//		// 先小写字母转换成大写，再进行判断
//		for (auto& ch : s)
//		{
//			if (ch >= 'a' && ch <= 'z')
//				ch -= 32;
//		}
//
//		int begin = 0, end = s.size() - 1;
//		while (begin < end)
//		{
//			while (begin < end && !isLetterOrNumber(s[begin]))
//				++begin;
//
//			while (begin < end && !isLetterOrNumber(s[end]))
//				--end;
//
//			if (s[begin] != s[end])
//			{
//				return false;
//			}
//			else
//			{
//
//				++begin;
//				--end;
//			}
//		}
//		return true;
//	}
//};

class Solution
{
public:
	bool myisthis(char ch)
	{
		return ((ch >= '0' && ch <= '9')
			|| (ch >= 'A' && ch <= 'Z')
			|| (ch >= 'a' && ch <= 'z'));
	}

	bool isPalindrome(string s)
	{
		for (auto& e : s)
		{
			if (e >= 'a' && e <= 'z')
			{
				e -= 32;
			}
		}

		int begin = 0;
		int end = s.size() - 1;
		while (begin < end)
		{
			while (begin < end && !myisthis(s[begin]))
			{
				begin++;
			}
			while (begin < end && !myisthis(s[end]))
			{
				end--;
			}
			if (s[begin] != s[end])
			{
				return false;
			}
			begin++;
			end--;
		}
		return true;
	}
};

void test4()
{
	Solution Sl;
	bool ret = Sl.isPalindrome("9,8");
	cout << ret << endl;
}




int main()
{
	//test1();
	//test2();
	//test3();
	//test4();
	test5();
	return 0;
}